Multiprocessor environments have been designed in various configurations. In a given configuration, all of the processors may be functionally equal, whereas in another configuration some processors may differ from other processors by virtue of having different hardware capabilities, different software assignments, or both. Depending on the configuration, processors may be tightly coupled to each other on a single bus, or they may be loosely coupled. In some configurations the processors share a central memory, in some they each have their own local memory, and in some configurations both shared and local memories are present.
Within a multiprocessor environment, a given process may need some ability to determine or measure time. Time measurement can be useful in a process that executes at a low level near the hardware, and in a process that executes at a higher level. Timers can be used for various purposes, such as calculating an elapsed time, yielding control to share a processor among different processes, or creating a timestamp, to name a few.
Hardware components used for timing may include one or more Advanced Configuration and Power Interface timers, Advanced Programmable Interrupt Controller timers, and other counters, clocks, timers, and/or interrupt generators. Software uses such hardware components to help provide timing services within a given system.